import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';
import { Response } from "express";
/* 我们之前通过interceptor——拦截器实现了对请求成功的拦截，然后统一成功返回的数据格式，但是失败返回还是nest的默认格式；
  如何修改请求失败的返回格式呢？interceptor显然不行，因为拦截器都是处理正常成功执行的请求。别忘了 AOP设计还有一个 exceptionFilter——异常过滤器；
  可以捕获到任何阶段的请求抛出的异常，然后将错误信息返回。 
  我们可以自己定义一个，对我们项目中异常进行自己捕获处理（不走nest默认的exceptionfilter）
   */

@Catch(HttpException)
export class CustomExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const response = host.switchToHttp().getResponse<Response>();
    // 设置响应头中的状态码
    response.statusCode = exception.getStatus();

    // 自己封装请求错误时的返回
    response.json({
      code: exception.getStatus(),
      message: "fail",
      data: exception.message
    }).end();
  }
}
